package com.sogouchat.smsmms; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.R.integer; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.graphics.drawable.Drawable; import android.text.Spannable; import android.text.SpannableString; import android.text.style.ClickableSpan; import android.text.style.ImageSpan; import android.view.View; import android.widget.Toast; public class MessageTranslate { private final static String STR_MARK ="(\\[)[^\\]]*(\\])"; public static SpannableString Trans(Context context,String str){ SpannableString ss = new SpannableString(str); MarkRecorder markrecorder = new MarkRecorder(); FindMark(str, markrecorder); for (MarkItem item:markrecorder.listItems) { Drawable d = PicCatch.GetI().Get(item); if (d!=null) { d.setBounds(0,0,d.getIntrinsicWidth(),d.getIntrinsicHeight()); ImageSpan span = new ImageSpan(d,ImageSpan.ALIGN_BASELINE); ss.setSpan(span, item.nStart, item.nEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(typeClick(d,context), item.nStart, item.nEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } return ss; } private static ClickableSpan typeClick(final Drawable drawable,final Context context) { return new ClickableSpan() { @Override public void onClick(View widget) { // TODO Auto-generated method stub new AlertDialog.Builder(context) .setIcon(drawable) .setTitle("pic") .create().show(); } }; } private static void FindMark(String str,MarkRecorder markRecorder){ Pattern pattern; Matcher matcher; pattern = Pattern.compile(STR_MARK); matcher = pattern.matcher(str); int nStart = 0; int nEnd = 0; int nLength = str.length(); String strResult; while(matcher.find(nStart)) { MatchResult mResult = matcher.toMatchResult(); strResult =mResult.group(0); nStart = matcher.start(); nEnd = matcher.end(); markRecorder.addItem(nStart,nEnd,strResult); nStart = nEnd; if (nStart>nLength) { break; } } } }